/*******************************************************************************
* Copyright (c) 2008, 2017 Oakland Software and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Oakland Software (francisu@ieee.org) - initial API and implementation
******************************************************************************/
package org.eclipse.jface.tests.dialogs;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.jface.util.SafeRunnable;
import junit.framework.TestCase;
/**
* NOTE - these tests are not really very good, in order to really test this you
* need to actually see what happens in the dialog, and therefore test it by
* hand.
*
* @since 3.4
*
*/
public class SafeRunnableErrorTest extends TestCase {
int count;
protected Thread runner() {
return new Thread(() -> {
ISafeRunnable runnable = new SafeRunnable() {
@Override
public void run() throws Exception {
throw new RuntimeException("test exception " + ++count);
}
};
SafeRunnable.run(runnable);
});
}
public void testSafeRunnableHandler() {
// Just make sure that nothing bad happens when we throw here
SafeRunnable.run(new SafeRunnable() {
@Override
public void run() throws Exception {
throw new RuntimeException("test exception");
}
});
}
public void testSafeRunnableHandlerOtherThread() throws Exception {
Thread t = runner();
t.run();
t.join();
}
public void testSafeRunnableHandlerMulti() {
ISafeRunnable runnable = new SafeRunnable() {
@Override
public void run() throws Exception {
throw new RuntimeException("test exception " + ++count);
}
};
// Make sure these don't block
int expectedRuns = 3;
for (int run = 0; run < expectedRuns; run++) {
SafeRunnable.run(runnable);
}
assertEquals(expectedRuns, count);
}
}